package leetcode.Y2024M6.review;

import org.junit.Test;

public class S122 {
    public int maxProfit(int[] prices) {
        int profit = 0;
        for (int i = 1; i < prices.length; i++) {
            int val = prices[i] - prices[i - 1];
            if (val > 0) profit += val;
        }
        return profit;
    }

    /**
     * 最他妈反直觉的玩意，即使拼尽全力也无法战胜
     * @param prices
     * @return
     */

    public int maxProfitDp(int[] prices) {
        int[][] dp = new int[2][prices.length];
        // 第一层是如果买入股票的利润，第二层是卖出股票的利润
        dp[0][0] = -prices[0];
        dp[1][0] = 0;
        for (int i = 1; i < prices.length; i++) {
            // 只要这个股价比前一个高就买
            dp[0][i] = Math.max(dp[0][i - 1], dp[1][i - 1] - prices[i]);
            // 是持有现金获利多还是 按照今天股价卖出股份赚钱多，dp[1][i-1]表示什么都不做，继续持有现金
            dp[1][i] = Math.max(dp[1][i - 1], dp[0][i - 1] + prices[i]);
        }
        return dp[1][prices.length - 1];
    }

    @Test
    public void test() {
        int[] prices = {7, 1, 5, 3, 6, 4};
        System.out.println(maxProfitDp(prices));
    }
}
